home *** CD-ROM | disk | FTP | other *** search
/ Chip: 2005 Utilities / CHIP Utilities 2005.7z / CHIP Utilities 2005.iso / docs / freedos / maxtor.custhelp.com / rnt / rnw / javascript / enduser.js
Encoding:
JavaScript  |  2004-08-11  |  17.3 KB  |  572 lines

  1. // ----------------------------------------------------------------------------
  2. //       File Name: enduser.js
  3. //       Subsystem: enduser
  4. //   Document Type: Javascript include file
  5. //         Purpose: contains all non-page specific enduser page Javascript
  6. // ----------------------------------------------------------------------------
  7.  
  8. function utf8_len(str)
  9. {
  10.     var i, sz, len = 0;
  11.  
  12.     for (i = 0, sz = str.length; i < sz; i++) 
  13.         if (str.charCodeAt(i) < 0x0080)
  14.             len += 1;
  15.         else if (str.charCodeAt(i) < 0x0800)
  16.             len += 2;
  17.         else
  18.             len += 3;
  19.  
  20.     return(len);
  21. }
  22.  
  23. // ----------------------------------------------------------------------------
  24.  
  25. function utf8_excess_chars(str, maxlen)
  26. {
  27.     var i, sz, len = 0; excess = 0;
  28.  
  29.     for (i = 0, sz = str.length; i < sz; i++)
  30.     {
  31.         if (str.charCodeAt(i) < 0x0080)
  32.             len += 1;
  33.         else if (str.charCodeAt(i) < 0x0800)
  34.             len += 2;
  35.         else
  36.             len += 3;
  37.  
  38.         if (len > maxlen)
  39.             excess += 1;
  40.     }
  41.  
  42.     return(excess);
  43. }
  44.  
  45. // ----------------------------------------------------------------------------
  46.  
  47. function is_furigana_string(str)
  48. {
  49.     var i, sz, c;
  50.  
  51.     for (i = 0, sz = str.length; i < sz; i++)
  52.     {
  53.         c = str.charCodeAt(i);
  54.  
  55.         if ((c >= 0x3041  &&  c <= 0x309E) || // hiragana
  56.             (c >= 0x30A1  &&  c <= 0x30FE) || // full-width katakana
  57.             (c == 0x2212) || (c == 0x2025) || // full-width hyphens
  58.             (c == 0xFF0E) || (c == 0x0020) || // nakaguro, ' '
  59.             (c >= 0x0030  &&  c <= 0x0039) || // '0' - '9'
  60.             (c >= 0x0041  &&  c <= 0x005A) || // 'A' - 'Z'
  61.             (c >= 0x0061  &&  c <= 0x007A) || // 'a' - 'z'
  62.             (c == 0x0028) || (c == 0x0029) || // '('   ')'
  63.             (c == 0x002C) || (c == 0x002E) || // ','   '.'
  64.             (c == 0x0026) || (c == 0x002D) || // '&'   '-'
  65.             (c == 0xFF0D) || (c == 0xFF06) || // full-width hypen and ampersand
  66.             (c == 0xFF08) || (c == 0xFF09) || // full-width parenthesis
  67.             (c == 0x3000))                    // full-width space
  68.             continue;
  69.  
  70.         return(false);
  71.     }
  72.  
  73.     return(true);
  74. }
  75.  
  76. // ----------------------------------------------------------------------------
  77.  
  78. function submenu(code, items)
  79. {
  80.     this.code  = code;
  81.     this.items = items;
  82. }
  83.  
  84. // ----------------------------------------------------------------------------
  85.  
  86. function subitem(code, name)
  87. {
  88.     this.code = code;
  89.     this.name = name;
  90. }
  91.  
  92. // ----------------------------------------------------------------------------
  93.  
  94. function field_data(int_msg, reqd_msg, not_complete_msg, oversz_msg,
  95.                     ascii_msg, email_msg, furigana_msg,
  96.                     mon_lbl, day_lbl, yr_lbl, hr_lbl, min_lbl,
  97.                     email_expr, date_order, no_html_msg, pos_int_msg)
  98. {
  99.     this.int_msg          = int_msg;
  100.     this.reqd_msg         = reqd_msg;
  101.     this.not_complete_msg = not_complete_msg;
  102.     this.oversz_msg       = oversz_msg;
  103.     this.ascii_msg        = ascii_msg;
  104.     this.email_msg        = email_msg;
  105.     this.furigana_msg     = furigana_msg;
  106.     this.no_html_msg      = no_html_msg;    
  107.     this.pos_int_msg      = pos_int_msg;
  108.     
  109.     // can't do a cfg_get in javascript, so store it in a javascript variable
  110.     switch (date_order) 
  111.     {
  112.     case 0: // American
  113.         this.dt_lbl     = new Array(mon_lbl, day_lbl, yr_lbl, hr_lbl, min_lbl);
  114.         this.dt_sfx     = new Array('_mon', '_day', '_yr');
  115.         break;
  116.     case 1: // Japanese
  117.         this.dt_lbl     = new Array(yr_lbl, mon_lbl, day_lbl, hr_lbl, min_lbl);
  118.         this.dt_sfx     = new Array('_yr', '_mon', '_day');
  119.         break;
  120.     case 2: // European
  121.         this.dt_lbl     = new Array(day_lbl, mon_lbl, yr_lbl, hr_lbl, min_lbl);
  122.         this.dt_sfx     = new Array('_day', '_mon', '_yr');
  123.         break;
  124.     }
  125.  
  126.     this.email_expr = new RegExp(email_expr ? email_expr : '.*');
  127. }
  128.  
  129. // ----------------------------------------------------------------------------
  130.  
  131. function field(name, label, type, maxlen, flags)
  132. {
  133.     this.name   = name;
  134.     this.label  = label;
  135.     this.type   = type;
  136.     this.maxlen = maxlen;
  137.  
  138.     // flags is a bitmask:
  139.     //  0x0001  required
  140.     //  0x0002  ascii only
  141.     //  0x0004  must match email pattern
  142.     //  0x0008  cannot contain HTML
  143.     //  0x0010  valid furigana characters only
  144.     //  0x0020  cannot contail < >
  145.     //  0x0040  int must be greater than 0
  146.     this.flags  = flags;
  147. }
  148.  
  149. // ----------------------------------------------------------------------------
  150.  
  151. function _upd_submenu(menu, submenu, submenu_data, all_str)
  152. {
  153.     var i, j = 1, sz;
  154.  
  155.     submenu.length = 0;
  156.  
  157.     submenu.options[0]       = new Option();
  158.     submenu.options[0].text  = all_str;
  159.     submenu.options[0].value = '';
  160.  
  161.     for (i = 0, sz = submenu_data.length; i < sz; i++)
  162.         if (submenu_data[i].code == menu.options[menu.selectedIndex].value)
  163.         {
  164.             for ( ; j <= submenu_data[i].items.length; j++)
  165.             {
  166.                 submenu.options[j]       = new Option();
  167.                 submenu.options[j].text  = submenu_data[i].items[j-1].name;
  168.                 submenu.options[j].value = submenu_data[i].items[j-1].code;
  169.             }
  170.  
  171.             break;
  172.         }
  173.  
  174.     submenu.length        = j;
  175.     submenu.selectedIndex = 0;
  176. }
  177.  
  178. // ----------------------------------------------------------------------------
  179.  
  180. function _alp_onload(page, gridsort)
  181. {
  182.     if (document.grid)
  183.     {
  184.         if (document.grid.p_page)
  185.             document.grid.p_page.selectedIndex = page - 1;
  186.         if (document.grid.p_gridsort)
  187.             document.grid.p_gridsort.value = gridsort;
  188.     }
  189. }
  190.  
  191. // ----------------------------------------------------------------------------
  192.  
  193. function _adp_print(url)
  194. {
  195.     window.open(url, 'print_answer', 'resizable,menubar,toolbar');
  196. }
  197.  
  198. // ----------------------------------------------------------------------------
  199.  
  200. function _adp_email(url)
  201. {
  202.     window.open(url, 'email_answer', 'resizable,width=700,height=392');
  203. }
  204.  
  205. // ----------------------------------------------------------------------------
  206. // CDT_DATE and CDT_DATETIME components are processed as individual CDT_MENU
  207. // fields
  208.  
  209. function _check_fields(form_name, fld_data, fields)
  210. {
  211.     var fld, i, j, v, str;
  212.     var ws_exp      = new RegExp("(^\\s+|\\s*$)", "g");
  213.     var strtok_exp  = new RegExp("%s");
  214.     var numtok_exp  = new RegExp("%d");
  215.     var valid_ascii = new RegExp("^[\x20-\x7e]+$");
  216.     var no_html     = new RegExp("[<>]");
  217.     
  218.     with (fld_data) for (i = 0; (i < fields.length) && fields[i].type; i++)
  219.     {
  220.         if ((fields[i].type != 4) && (fields[i].type != 7))
  221.             fld = eval('document.'+form_name+'.'+fields[i].name);
  222.  
  223.         switch (fields[i].type)
  224.         {
  225.             case 1: // CDT_MENU
  226.                 if ((fields[i].flags & 1) &&
  227.                     (fld.length > 1) && (fld.selectedIndex < 1))
  228.                 {
  229.                     alert('\''+fields[i].label+'\' '+reqd_msg);
  230.                     fld.focus();
  231.                     return(false);
  232.                 }
  233.                 break;
  234.  
  235.             case 2: // CDT_BOOL
  236.             case 8: // CDT_OPT_IN
  237.                 if ((fields[i].flags & 1) &&
  238.                     !fld[0].checked && !fld[1].checked)
  239.                 {
  240.                     alert('\''+fields[i].label+'\' '+reqd_msg);
  241.                     fld[0].focus();
  242.                     return(false);
  243.                 }
  244.                 break;
  245.  
  246.             case 3: // CDT_INT
  247.                 fld.value = fld.value.replace(ws_exp, '');
  248.                 if (fld.value.length && isNaN(fld.value))
  249.                 {
  250.                     alert('\''+fields[i].label+'\' '+int_msg);
  251.                     fld.focus();
  252.                     return(false);
  253.                 }
  254.                 if (fields[i].flags & 0x40 && fld.value < 0)
  255.                 {
  256.                     alert('\''+fields[i].label+'\' '+pos_int_msg);
  257.                     fld.focus();
  258.                     return(false);                     
  259.                 }
  260.  
  261.                 // deliberate drop through
  262.  
  263.             case 5: // CDT_VARCHAR
  264.             case 6: // CDT_MEMO
  265.                 if (fields[i].maxlen && (fields[i].maxlen < fld.value.length))
  266.                 {
  267.                     str = oversz_msg.replace(strtok_exp, fields[i].label);
  268.                     str = str.replace(numtok_exp, fields[i].maxlen);
  269.                     str = str.replace(numtok_exp,
  270.                                       fld.value.length - fields[i].maxlen);
  271.  
  272.                     alert(str);
  273.                     fld.focus();
  274.                     return(false);
  275.                 }
  276.  
  277.                 if (fields[i].type != 3)
  278.                     fld.value = fld.value.replace(ws_exp, '');
  279.  
  280.                 if ((fields[i].flags & 1) && (fld.value.length == 0))
  281.                 {
  282.                     alert('\''+fields[i].label+'\' '+reqd_msg);
  283.                     fld.focus();
  284.                     return(false);
  285.                 }
  286.  
  287.                 // if not required and not set, don't do checks
  288.                 if ((fld.value.length == 0))
  289.                     break;
  290.  
  291.                 if ((fields[i].flags & 2) && !valid_ascii.test(fld.value))
  292.                 {
  293.                     alert('\''+fields[i].label+'\' '+ascii_msg);
  294.                     fld.focus();
  295.                     return(false);
  296.                 }
  297.  
  298.                 if ((fields[i].flags & 4) && !email_expr.test(fld.value))
  299.                 {
  300.                     alert('\''+fields[i].label+'\' '+email_msg);
  301.                     fld.focus();
  302.                     return(false);
  303.                 }
  304.  
  305.                 if ((fields[i].flags & 0x10) && !is_furigana_string(fld.value))
  306.                 {
  307.                     alert('\''+fields[i].label+'\' '+furigana_msg);
  308.                     fld.focus();
  309.                     return(false);
  310.                 }
  311.                 
  312.                 if (fields[i].flags & 0x20 && no_html.test(fld.value))
  313.                 {
  314.                     alert('\''+fields[i].label+'\' '+ no_html_msg);
  315.                     fld.focus();
  316.                     return(false);
  317.                 }
  318.                 
  319.                 break;
  320.  
  321.  
  322.             case 4: // CDT_DATETIME
  323.             case 7: // CDT_DATE
  324.                 fld = new Array();
  325.  
  326.                 fld[0] = eval('document.'+form_name+'.'+fields[i].name+dt_sfx[0]);
  327.                 fld[1] = eval('document.'+form_name+'.'+fields[i].name+dt_sfx[1]);
  328.                 fld[2] = eval('document.'+form_name+'.'+fields[i].name+dt_sfx[2]);
  329.  
  330.                 if (fields[i].type == 4)
  331.                 {
  332.                     fld[3] = eval('document.'+form_name+'.'+fields[i].name+'_hr');
  333.                     fld[4] = eval('document.'+form_name+'.'+fields[i].name+'_min');
  334.                 }
  335.  
  336.                 if (!(fields[i].flags & 1))
  337.                 {
  338.                     for (j = v = 0; j < fld.length; j++)
  339.                         v += (fld[j].selectedIndex > 0) ? 0 : 1;
  340.  
  341.                     if ((v != 0) && (v != fld.length))
  342.                     {
  343.                         alert('\''+fields[i].label+'\' '+not_complete_msg);
  344.                         fld[0].focus();
  345.                         return(false);
  346.                     }
  347.  
  348.                     break;
  349.                 }
  350.  
  351.                 for (j = 0; j < fld.length; j++)
  352.                     if ((fld[j].selectedIndex < 1))
  353.                     {
  354.                         alert('\''+fields[i].label+' ('+dt_lbl[j]+')\' '+reqd_msg);
  355.                         fld[j].focus();
  356.                         return(false);
  357.                     }
  358.  
  359.                 break;
  360.         }
  361.     }
  362.  
  363.     return(true);
  364. }
  365.  
  366. // ----------------------------------------------------------------------------
  367.  
  368. function _validate_acctinfo(userid, passwd1, passwd2, min_passwd_len, msgs)
  369. {
  370.     var msg = -1, fld;
  371.  
  372.     if (userid.value.indexOf(' ') != -1)
  373.          msg = 0, fld = userid;
  374.  
  375.     if (userid.value.indexOf('\"') != -1)
  376.          msg = 1, fld = userid;
  377.  
  378.     if (passwd1 && (passwd1.value != passwd2.value))
  379.          msg = 2, fld = passwd1;
  380.  
  381.     if (passwd1 && (passwd1.value.length < min_passwd_len))
  382.         msg = 3, fld = passwd1;
  383.  
  384.     if (msg != -1)
  385.     {
  386.         alert(msgs[msg]);
  387.         fld.focus();
  388.         fld.select();
  389.         return(false);
  390.     }
  391.  
  392.     return(true);
  393. }
  394.  
  395. // ----------------------------------------------------------------------------
  396.  
  397. var cursor_set = false;
  398.  
  399. function _set_cursor()
  400. {
  401.     var i, j;
  402.  
  403.     if (cursor_set)
  404.         return;
  405.  
  406.     cursor_set = true;
  407.  
  408.     if (document.location.href.indexOf('#') > -1)
  409.         return;
  410.  
  411.     for (i = 0; i < document.forms.length; i++)
  412.         for (j = 0; j < document.forms[i].length; j++)
  413.            with (document.forms[i])
  414.                if (elements[j].type && ((elements[j].type == 'text') || (elements[j].type == 'textarea')))
  415.                {
  416.                    elements[j].focus();
  417.                    if (elements[j].value.length)
  418.                        elements[j].select();
  419.                    return;
  420.                }
  421. }
  422.  
  423. // ----------------------------------------------------------------------------
  424.  
  425. function check_mask(mask_fld)
  426. {
  427.     var i, ln, js_msg = '';
  428.     var val = '', code = '', echar = '', fchar = '';
  429.  
  430.     if (mask_fld.value == eval(mask_fld.name+'_dmask'))
  431.         return;
  432.  
  433.     if (eval(mask_fld.name + '_emask.length') < mask_fld.value.length)
  434.         js_msg = "Field contains too many characters";
  435.     else        
  436.         for (i = 0, ln = eval(mask_fld.name + '_emask.length'); i < ln; i++)
  437.         {
  438.  
  439.             val = mask_fld.value.charAt(i);
  440.             code = mask_fld.value.charCodeAt(i);
  441.             echar = eval(mask_fld.name + '_emask.charAt(i)');
  442.             fchar = eval(mask_fld.name + '_fstr.charAt(i)');
  443.  
  444.             if (fchar == 'F' && val != echar)
  445.             {
  446.                 if (val == ' ')
  447.                     js_msg = 'Must contain a valid format character.';
  448.                 else
  449.                     js_msg = val + ' is not a valid format character.';
  450.                 break;
  451.             }    
  452.             else if ((echar == '#') &&
  453.                 (!((code >= 48) && (code <= 57))))
  454.             {
  455.                 if (val == '')
  456.                     js_msg = 'Must contain a valid number.';
  457.                 else
  458.                     js_msg = val + ' is not a valid number.';
  459.                 break;
  460.             }
  461.             else if ((echar == 'A') &&
  462.                     (!(((code >= 48) && (code <= 57)) || 
  463.                       ((code >= 65) && (code <= 90)) ||
  464.                       ((code >= 97) && (code <= 122)))))
  465.             {
  466.                 if (val == '')
  467.                     js_msg = 'Must contain a valid alpha-numeric.';
  468.                 else            
  469.                     js_msg = val + ' is not a valid alpha-numeric.';
  470.                 break;
  471.             }
  472.             else if ((echar == 'L') &&
  473.                     (!(((code >= 65) && (code <= 90)) || 
  474.                       ((code >= 97) && (code <= 122)))))
  475.             {
  476.                 if (val == '')
  477.                     js_msg = 'Must contain a valid letter.';
  478.                 else
  479.                     js_msg = val + ' is not a valid letter.';
  480.                 break;
  481.             }
  482.             else if ((echar == 'C') &&
  483.                     (!(((code >= 32) && (code <= 126)) || 
  484.                      ((code >= 128) && (code <= 255)))))
  485.             {
  486.                 if (val == '')
  487.                     js_msg = 'Must contain a valid character.';
  488.                 else
  489.                     js_msg = val + ' is not a valid character.';
  490.                 break;
  491.             }
  492.         }
  493.     
  494.     if (js_msg)
  495.     {
  496.         alert(js_msg+'\n\nThe correct format is '+eval(mask_fld.name+'_dmask')+ '.');
  497.         mask_fld.focus();
  498.         return(false);
  499.     }
  500.     return(true);
  501. }
  502.  
  503. // ----------------------------------------------------------------------------
  504.  
  505. function put_mask(mask_fld, val, formelm, nn)
  506. {
  507.     var mtmp = '', ftmp = '', dtmp = '';
  508.     var i, sl;   
  509.  
  510.     for (i = 0, sl = val.length; i < sl; i++)
  511.     {
  512.         ftmp += val.charAt(i);
  513.  
  514.         if (val.charAt(i) == 'F')
  515.             dtmp += val.charAt(i+1);
  516.         else
  517.             dtmp += (val.charAt(i+1) == '#') ? '#' : '@';
  518.  
  519.         mtmp += val.charAt(++i);
  520.  
  521.     }
  522.     if (!nn)  
  523.         eval("document.getElementById('"+mask_fld+"_mask').innerHTML='"+dtmp+"'");
  524.  
  525.     eval(mask_fld + '_fstr = ftmp');
  526.     eval(mask_fld + '_emask = mtmp');
  527.     eval(mask_fld + '_dmask = dtmp');
  528.  
  529. }
  530.  
  531. // ----------------------------------------------------------------------------
  532.  
  533. function answer_window_preview(ansid, created)
  534. {
  535.     var agt=navigator.userAgent.toLowerCase();
  536.     var is_major = parseInt(navigator.appVersion);
  537.     var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
  538.         && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
  539.         && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
  540.  
  541.     // Check browser version numbers.
  542.     // Netscape version 6+ uses is_major == 5, previous versions < 5
  543.     if(is_nav && (is_major < 5))
  544.     {
  545.         h_size = top.innerWidth;
  546.         v_size = top.innerHeight;
  547.     }
  548.     // Netscape version    6+
  549.     else if(is_nav && (is_major < 7))
  550.     {
  551.         h_size = document.body.offsetWidth;
  552.         v_size = document.body.offsetHeight;
  553.     }
  554.     // All others (including IE)
  555.     else
  556.     {
  557.         h_size = document.body.clientWidth;
  558.         v_size = document.body.clientHeight;
  559.     }
  560.  
  561.     h_size -= 20;
  562.     v_size = Math.floor(v_size * 0.8);
  563.  
  564.     if (v_size < 200)
  565.         v_size = 200;
  566.  
  567.     window.open('popup_adp.php?<? print("p_sid=$p_sid&p_lva=$p_lva&p_li=$p_li") ?>&p_faqid='+ansid+'&p_created='+created,
  568.                 'suggested_answer',
  569.                 'scrollbars,resizable,toolbar,menubar,width=' + h_size
  570.                     + ',height=' + v_size);
  571. }
  572.